package cn.edu.neu.studentmsg_java.service.impl;

import cn.edu.neu.studentmsg_java.dao.CourseDao;
import cn.edu.neu.studentmsg_java.dao.MCDao;
import cn.edu.neu.studentmsg_java.dao.MajorDao;
import cn.edu.neu.studentmsg_java.model.Course;
import cn.edu.neu.studentmsg_java.service.CourseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class CourseServiceImpl implements CourseService {
    @Autowired
    private CourseDao courseDao;
    @Autowired
    private MCDao mcDao;
    @Autowired
    private MajorDao majorDao;

    @Override
    public List<Course> findCoursePart(Course course) {
        return courseDao.selectCoursePart(course);
    }

    @Override
    public int removeCourseById(Integer course_id) {
        mcDao.deleteMCByCourseId(course_id);
        return courseDao.deleteCourseById(course_id);
    }

    @Override
    public int addCourse(Course course) {
        //添加课程信息
        int result = courseDao.insertCourse(course);
        //如果说添加结果大于0证明添加成功，但因为如果是主修课需要绑定专业，所以需要判断课程类别是否为1
        if (result > 0 && course.getCategory() == 1) {
            //因为课程名称也是唯一的，所以通过课程名称去查询他所对应的课程id
            course.setCourse_id(courseDao.selectCourseIdByCourseName(course.getCourse_name()));
            //因为专业名称是唯一的，所以通过专业名称去查询它对应的专业id
            course.setMajor_id(majorDao.selectMajorIdByMajorName(course.getMajor_name()));
            //判断专业id和课程id是不是都不为空，如果都不为空，那么将建立他妈之间的关联
            if (course.getMajor_id() != null && course.getCourse_id() != null) {
                //通过插入专业和课程的中间表数据，来为该主修课和专业建立关联
                result = mcDao.insertMC(course);
                return result;
            }
        }
        return 0;
    }

    @Override
    public int modifyCourseById(Course course) {
        //判断课程类别是否等于1，如果等于1证明是必修课
        if (course.getCategory() == 1) {
            //通过课程id去更新课程信息
            courseDao.updateCourseById(course);
            //通过课程名称获取课程id，并存储在course中
            course.setMajor_id(majorDao.selectMajorIdByMajorName(course.getMajor_name()));
            //通过课程id去更新课程与专业的关联信息
            return mcDao.updateMCByCourseId(course);
        } else if (course.getCategory() == 2) {
            //如果等于2，则为选修课
            mcDao.deleteMCByCourseId(course.getCourse_id());
            return courseDao.updateCourseById(course);
        }
        return 0;
    }

    @Override
    public boolean CategoryIsOneByCourseName(String course_name) {
        return courseDao.CategoryIsOneByCourseName(course_name) == 1;
    }

    @Override
    public List<Course> findMajorCourses() {
        return courseDao.selectMajorCourses();
    }

    @Override
    public List<Course> findMinorCourses() {
        return courseDao.selectMinorCourses();
    }

    @Override
    public List<String> findCourseName() {
        return courseDao.selectCourseName();
    }

    @Override
    public String findMajorNameByCourseId(Integer course_id) {
        return mcDao.selectMajorNameByCourseId(course_id);
    }

    @Override
    public List<String> findMinorCourseName() {
        return courseDao.selectMinorCourseName();
    }

    @Override
    public String findCourseNameByCourseId(Integer course_id) {
        return courseDao.selectCourseNameByCourseId(course_id);
    }
}
